home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
DiskUtil
/
Crunch
/
XPK
/
DOCS
/
IMPL.DOC
< prev
next >
Wrap
Text File
|
1992-11-02
|
4KB
|
99 lines
IMPL
A LZ77 variant supporting various compression modes
Version 1.00
Copyright 1992 Peter Struijk
License/Disclaimer
------------------
This library may be freely distributed with the XPK compression
package, as long as it is kept in its original, complete, and unmodified
form. It may not be distributed by itself or in a commercial package of
any kind without my permission.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
Description
-----------
This XPK sub-library uses basically the same algorithm as found in the
Imploder, but without the specifics needed for compressing self-contained
executables.
A quote from the Imploder 4.0 technical manual says it all :-)
IMPL does LZ77 like compression with a, per mode, static Huffman like coding
step on the various parts of the skip, offset and length tuples. Due to the
efficient encoding, a tuple can require less than 12 bits, and thus strings of
2 bytes length and up are encodable with a decent gain (given small Huffman
patterns corresponding to likely circumstances).
Following is a table, listing some comparative statistics for executables,
for all compression modes, using a xpk chunk size of 64K. These were
generated by xBench on the standard XPK benchmark system (A3000/25 with SCRAM,
using the AmigaVision executable as data). Note that memory requirements do
not include xpkmaster.library's buffers. The 2nd number indicates the memory
needed using the non-turbo mode, which automatically kicks in if there's
insufficient memory available. Thanks to Urban Dominik Mueller for providing
this information.
Method Mode Packing Unpacking Packing Unpacking Compression Description
Memory Memory Speed Speed Ratio
------ ------- ------- --------- ------- --------- ----------- -----------
IMPL 0..10 300K/0K 0K 29 K/s 360 K/s 34.8% 0.10*max
IMPL 11..30 350K/0K 0K 27 K/s 332 K/s 39.8% 0.30*max
IMPL 31..50 400K/0K 0K 20 K/s 314 K/s 43.3% 0.50*max
IMPL 51..75 425K/0K 0K 14 K/s 300 K/s 44.0% 0.75*max
IMPL 76..98 450K/0K 0K 8 K/s 292 K/s 44.2% 1.00*max
IMPL 99..100 450K/0K 0K 6 K/s 291 K/s 44.3% adaptive
The default compression mode is 100 which means that the actual
compression mode used depends on the chunksize. The default chunksize is 64K.
In general, this mode produces the best compression ratio, although the mode
range 76..98 (1.00*max) will sometimes produce better results.
What does this 1.00*max description mean? First the maximum allowable
compression mode, for a particular chunksize, is computed. Then this maximum
mode is scaled down by a factor depending on the chosen compression mode
(<99). The above table is valid only when using the default chunksize. If a
program uses a smaller chunksize the compression speeds will go up, if it uses
a larger chunksize compression ratios will improve somewhat.
The current version of xpkIMPL.library will, by default, react to a BREAK
signal (CTRL-C) while compressing. Compressing a chunk (especially on
unaccelerated amiga's) can take quite a bit time, so allowing the user to
break-off compression is useful. For now, it's not possible to turn this
feature off!
Goodluck,
Peter.
Version History
---------------
0.01 Well known Imploder compression algorithm now included in a xpk sublibrary.
0.19 Improved robustness. Released with xpk 2.4.
1.00 Much needed documentation added. ;-) Released with xpk 2.5.
Contact Address
---------------
Peter Struijk
Veulenkamp 28
2623 XD DELFT
The Netherlands
winfjmf@dutiws.twi.tudelft.nl